package codeTopPractice;

import java.util.HashMap;

/**
 * 给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 target  的那 两个 整数，并返回它们的数组下标。
 */
public class 两数之和 {

    public static void main(String[] args) {

    }

    // 使用hashmap的contains方法比较是否含有对应和的差值，有则返回下标 ，无则放入map中继续遍历数组后续元素
    public static int[] twoSum(int[] nums,int target){
        //已知结果唯一，只有一对数字符合要求，先创建容量为2的数组
        int[] res = new int[2];
        //特判，直接返回空数组
        if(nums.length<=1){
            return res;
        }

        HashMap<Integer,Integer> map = new HashMap<>();
        for (int i = 0; i <nums.length ; i++) {
            //通过比较目标和的值和当前元素差值是否存在hashmap中，存在则将两个值添加进res数组直接返回
            if(map.containsKey(target-nums[i])){
                res[0]=map.get(target-nums[i]);
                res[1]=i;
                return res;
            }else {
                map.put(nums[i],i );
            }
        }

        //没有合适结果，直接返回空数组
        return res;
    }

}
